home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2003 March / DPPCPRO0303.ISO / Components / Microsoft ASP / _SETUP.1 / ASPWizard.jar / asp / wizard / WizardModelDbQuery.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-20  |  13.0 KB  |  365 lines

  1. package asp.wizard;
  2.  
  3. import asp.netobjects.nfx.ui.OrderedListModel;
  4. import asp.netobjects.nfx.util.ExceptionHandler;
  5. import asp.netobjects.nfx.util.ExternalError;
  6. import asp.netobjects.nfx.util.InternalError;
  7. import asp.netobjects.nfx.wizard.Wizard;
  8. import asp.netobjects.nfx.wizard.WizardPage;
  9. import asp.netobjects.nfx.wizard.WizardPageView;
  10. import asp.netobjects.nfx.wizard.WizardView;
  11. import asp.util.ResourceUtil;
  12. import asp.wizard.def.DefConnection;
  13. import asp.wizard.def.DefQuery;
  14. import com.sun.java.swing.DefaultListModel;
  15. import com.sun.java.swing.ImageIcon;
  16. import java.awt.Component;
  17. import java.awt.Point;
  18. import java.awt.event.WindowEvent;
  19. import java.sql.Connection;
  20. import java.sql.ResultSet;
  21. import java.sql.ResultSetMetaData;
  22. import java.sql.SQLException;
  23. import java.util.Enumeration;
  24. import java.util.Observable;
  25. import java.util.Vector;
  26.  
  27. public class WizardModelDbQuery extends WizardModelAbstract {
  28.    public static final String SUBWIZFINISHED = "_subwizfinished_";
  29.    public static final String ERR_QUERY_NEVER_BUILT = "error.query_never_built";
  30.    public static final String ERR_SPEC_SELECT = "error.spec_select";
  31.    public static final String ERR_SPEC_FROM = "error.spec_from";
  32.    public static final String ERR_QUERY_FAILED_REQD = "error.query_failed_reqd";
  33.    public static final String ERR_QUERY_FAILED_ROW1 = "error.query_failed_row1";
  34.    public static final String ERR_DUP_FIELDS = "error.dup_fields";
  35.    public static final String ERR_HASSPACE_FIELDS = "error.hasspace_fields";
  36.    public static final String ERR_QUERY_FAILED = "error.query_failed";
  37.    public static final String ERR_UNSUPPORTED_FIELDS = "error.unsupported_fields";
  38.    public static final String LBL_SECOND_INTROHEAD = "label.secondintrohead";
  39.    public static final String LBL_SECOND_INTRO = "label.secondintro";
  40.    private boolean _firstTime = true;
  41.    private DefQuery _defQuery;
  42.    private boolean _defExists = false;
  43.    private DefConnection _defConn;
  44.    private ResultSet _queryRS;
  45.    // $FF: synthetic field
  46.    static Class class$asp$wizard$WizardSubDbQuery;
  47.    // $FF: synthetic field
  48.    static Class class$asp$wizard$WVPanelDbQuery;
  49.  
  50.    public WizardModelDbQuery() {
  51.    }
  52.  
  53.    public WizardModelDbQuery(Wizard wizard, String bullet, String info, ImageIcon icon, ExceptionHandler handler) {
  54.       super(wizard, bullet, info, icon, handler);
  55.    }
  56.  
  57.    protected WizardPageView getViewSingleInstance() {
  58.       return WizardViewDbQuery.getInstance();
  59.    }
  60.  
  61.    public void update(Observable o, Object arg) {
  62.       if (o.getClass() == (class$asp$wizard$WizardSubDbQuery != null ? class$asp$wizard$WizardSubDbQuery : (class$asp$wizard$WizardSubDbQuery = class$("asp.wizard.WizardSubDbQuery")))) {
  63.          if (arg == null) {
  64.             this._firstTime = false;
  65.             WizardViewDbQuery view = (WizardViewDbQuery)((WizardPage)this).getView();
  66.             WizardSubDbQuery subwiz = WizardSubDbQuery.getInstance();
  67.             view.setSelect(subwiz.getSelect());
  68.             view.setFrom(subwiz.getFrom());
  69.             view.setWhere(subwiz.getWhere());
  70.             view.setOrderBy(subwiz.getOrderBy());
  71.          } else if (arg instanceof WindowEvent && (((WindowEvent)arg).getID() == 201 || ((WindowEvent)arg).getID() == 202)) {
  72.             WizardManager wm = ((WizardModelAbstract)this).getWizardManager();
  73.             WizardSubDbQuery subwiz = (WizardSubDbQuery)o;
  74.             WizardView view = ((Wizard)wm).getView();
  75.             if (!((Component)view).isVisible()) {
  76.                WizardView subwizview = ((Wizard)subwiz).getView();
  77.                ((Component)view).setLocation(((Component)subwizview).getLocation());
  78.                ((Component)view).setVisible(true);
  79.             }
  80.  
  81.             ((Observable)subwiz).deleteObserver(this);
  82.          }
  83.       }
  84.  
  85.       WizardViewDbQuery view = (WizardViewDbQuery)((WizardPage)this).getView();
  86.       view.updateControls(this.isFirstTime());
  87.    }
  88.  
  89.    public void showSqlBuilder() {
  90.       try {
  91.          WizardSubDbQuery subwiz = WizardSubDbQuery.getInstance();
  92.          WizardManager wm = ((WizardModelAbstract)this).getWizardManager();
  93.          if (!((Wizard)subwiz).getView().isVisible()) {
  94.             subwiz.setDefConnection(wm.getDefConnection(this));
  95.             subwiz.initialize();
  96.             Point mimiWizLoc = new Point(((Wizard)wm).getView().getLocation().x + 40, ((Wizard)wm).getView().getLocation().y + 40);
  97.             ((Wizard)subwiz).getView().setLocation(mimiWizLoc);
  98.             ((Wizard)subwiz).getView().setSize(540, 400);
  99.             ((Observable)subwiz).addObserver(this);
  100.             ((Wizard)subwiz).getView().setVisible(true);
  101.             ((WizardPage)this).getView().repaint();
  102.          }
  103.       } catch (Exception e) {
  104.          AspWizardExceptionHandler.showMessage(0, ((Throwable)e).getMessage());
  105.       }
  106.  
  107.    }
  108.  
  109.    public boolean isFirstTime() {
  110.       return this._firstTime;
  111.    }
  112.  
  113.    public DefQuery getDefQuery() {
  114.       if (this._defQuery == null) {
  115.          this._defQuery = new DefQuery();
  116.          String name = ((WizardModelAbstract)this).getDefPage().getUniqueNameFor(this._defQuery);
  117.          this._defQuery.setName(name);
  118.          WizardManager wm = ((WizardModelAbstract)this).getWizardManager();
  119.          DefConnection defConn = null;
  120.          if (wm != null) {
  121.             defConn = wm.getDefConnection(this);
  122.          }
  123.  
  124.          this._defQuery.setDefConnection(defConn);
  125.          ((WizardModelAbstract)this).getDefPage().addElement(this._defQuery);
  126.       }
  127.  
  128.       return this._defQuery;
  129.    }
  130.  
  131.    void setDefQuery(DefQuery dq) {
  132.       this._defQuery = dq;
  133.    }
  134.  
  135.    public void commit() throws InternalError, ExternalError {
  136.       boolean committed = false;
  137.  
  138.       try {
  139.          WizardViewDbQuery view = (WizardViewDbQuery)((WizardPage)this).getView();
  140.          DefQuery defQuery = this.getDefQuery();
  141.          defQuery.setSelect(view.getSelect());
  142.          defQuery.setFrom(view.getFrom());
  143.          defQuery.setWhere(view.getWhere());
  144.          defQuery.setOrderBy(view.getOrderBy());
  145.          if (((WizardModelAbstract)this).getWizardManager().isUsePreviousQuery(this)) {
  146.             defQuery.setUsePreviousQuery(0);
  147.          } else {
  148.             defQuery.setUsePreviousQuery(1);
  149.          }
  150.  
  151.          defQuery.setDefConnection(this._defConn);
  152.          defQuery.setResultSet(this._queryRS);
  153.          committed = true;
  154.       } finally {
  155.          if (!committed && this._queryRS != null) {
  156.             try {
  157.                this._queryRS.close();
  158.             } catch (SQLException e2) {
  159.                System.err.println(((Throwable)e2).getMessage());
  160.                this._queryRS = null;
  161.             }
  162.          }
  163.  
  164.       }
  165.  
  166.    }
  167.  
  168.    public void loadValues() {
  169.       WizardViewDbQuery view = (WizardViewDbQuery)((WizardPage)this).getView();
  170.       if (this._defQuery == null) {
  171.          view.setSelect("");
  172.          view.setFrom("");
  173.          view.setWhere("");
  174.          view.setOrderBy("");
  175.       } else {
  176.          view.setSelect(this._defQuery.getSelect());
  177.          view.setFrom(this._defQuery.getFrom());
  178.          view.setWhere(this._defQuery.getWhere());
  179.          view.setOrderBy(this._defQuery.getOrderBy());
  180.       }
  181.  
  182.    }
  183.  
  184.    public void loadView() {
  185.       WizardSubDbQuery subwiz = WizardSubDbQuery.getInstance();
  186.       subwiz.clearValues();
  187.       this.loadValues();
  188.       this.setupIntroText();
  189.       WizardViewDbQuery view = (WizardViewDbQuery)((WizardPage)this).getView();
  190.       view.updateControls(this.isFirstTime());
  191.    }
  192.  
  193.    public void validate() throws InternalError, ExternalError {
  194.       super.validate();
  195.       WizardViewDbQuery view = (WizardViewDbQuery)((WizardPage)this).getView();
  196.       if (this.isFirstTime()) {
  197.          String msg = ResourceUtil.getResourceString("asp.wizard.res", class$asp$wizard$WVPanelDbQuery != null ? class$asp$wizard$WVPanelDbQuery : (class$asp$wizard$WVPanelDbQuery = class$("asp.wizard.WVPanelDbQuery")), "error.query_never_built");
  198.          throw new ExternalError(msg);
  199.       } else if (view.getSelect() != null && !view.getSelect().equals("")) {
  200.          if (view.getFrom() != null && !view.getFrom().equals("")) {
  201.             boolean validated = false;
  202.  
  203.             try {
  204.                this._queryRS = null;
  205.                Connection _conn = this.getConnection();
  206.                WizDbManager WDBM = WizDbManager.getInstance();
  207.                this._queryRS = WDBM.getResultSet(_conn, this.buildSQL());
  208.                OrderedListModel lm = (OrderedListModel)WizDbManager.getFields(this._queryRS, false, new OrderedListModel());
  209.                this.validateColumnHasNoSpace(lm);
  210.                this.validateColumnUniqueness(lm);
  211.                this.validateColumnTypes(this._queryRS);
  212.                validated = true;
  213.             } catch (EWizDbManager e) {
  214.                String msg = ResourceUtil.getResourceString("asp.wizard.res", class$asp$wizard$WVPanelDbQuery != null ? class$asp$wizard$WVPanelDbQuery : (class$asp$wizard$WVPanelDbQuery = class$("asp.wizard.WVPanelDbQuery")), "error.query_failed_reqd");
  215.                throw new ExternalError(msg + "\n\n" + ((Throwable)e).getMessage());
  216.             } finally {
  217.                if (!validated && this._queryRS != null) {
  218.                   try {
  219.                      this._queryRS.close();
  220.                   } catch (SQLException e2) {
  221.                      System.err.println(((Throwable)e2).getMessage());
  222.                      this._queryRS = null;
  223.                   }
  224.                }
  225.  
  226.             }
  227.  
  228.          } else {
  229.             String msg = ResourceUtil.getResourceString("asp.wizard.res", class$asp$wizard$WVPanelDbQuery != null ? class$asp$wizard$WVPanelDbQuery : (class$asp$wizard$WVPanelDbQuery = class$("asp.wizard.WVPanelDbQuery")), "error.spec_from");
  230.             throw new ExternalError(msg);
  231.          }
  232.       } else {
  233.          String msg = ResourceUtil.getResourceString("asp.wizard.res", class$asp$wizard$WVPanelDbQuery != null ? class$asp$wizard$WVPanelDbQuery : (class$asp$wizard$WVPanelDbQuery = class$("asp.wizard.WVPanelDbQuery")), "error.spec_select");
  234.          throw new ExternalError(msg);
  235.       }
  236.    }
  237.  
  238.    public Connection getConnection() throws EWizDbManager {
  239.       WizardManager WM = ((WizardModelAbstract)this).getWizardManager();
  240.       this._defConn = WM.getDefConnection(this);
  241.       WizDbManager WDBM = WizDbManager.getInstance();
  242.       Connection conn = WDBM.getConnection(this._defConn.getDSNName(), this._defConn.getUserName(), this._defConn.getPassword());
  243.       return conn;
  244.    }
  245.  
  246.    public void validateColumnHasNoSpace(DefaultListModel lm) throws ExternalError {
  247.       String fieldName = null;
  248.       Enumeration e = lm.elements();
  249.  
  250.       while(e.hasMoreElements()) {
  251.          fieldName = e.nextElement().toString();
  252.          if (fieldName != null && fieldName.indexOf(" ") != -1) {
  253.             String err = ResourceUtil.getResourceString("asp.wizard.res", class$asp$wizard$WVPanelDbQuery != null ? class$asp$wizard$WVPanelDbQuery : (class$asp$wizard$WVPanelDbQuery = class$("asp.wizard.WVPanelDbQuery")), "error.hasspace_fields");
  254.             throw new ExternalError(err);
  255.          }
  256.       }
  257.  
  258.    }
  259.  
  260.    public void validateColumnUniqueness(OrderedListModel lm) throws ExternalError {
  261.       String prevField = "";
  262.       String newField = "";
  263.       lm.setOrdered(true);
  264.  
  265.       for(Enumeration e = ((DefaultListModel)lm).elements(); e.hasMoreElements(); prevField = newField) {
  266.          newField = e.nextElement().toString();
  267.          if (prevField.compareTo(newField) == 0) {
  268.             String err = ResourceUtil.getResourceString("asp.wizard.res", class$asp$wizard$WVPanelDbQuery != null ? class$asp$wizard$WVPanelDbQuery : (class$asp$wizard$WVPanelDbQuery = class$("asp.wizard.WVPanelDbQuery")), "error.dup_fields");
  269.             throw new ExternalError(err + " " + prevField);
  270.          }
  271.       }
  272.  
  273.    }
  274.  
  275.    public void validateColumnTypes(ResultSet resultSet) throws ExternalError {
  276.       try {
  277.          ResultSetMetaData rsmd = resultSet.getMetaData();
  278.          int columnCount = rsmd.getColumnCount();
  279.          String typeName = null;
  280.          Vector badColumns = new Vector();
  281.  
  282.          for(int i = 1; i <= columnCount; ++i) {
  283.             typeName = WizDbManager.getDataTypeName(rsmd.getColumnType(i));
  284.             if (typeName == null || typeName.equals("")) {
  285.                badColumns.addElement(rsmd.getColumnName(i));
  286.             }
  287.          }
  288.  
  289.          int badCount = badColumns.size();
  290.          if (badCount > 0) {
  291.             StringBuffer sb = new StringBuffer();
  292.  
  293.             for(int i = 0; i < badCount; ++i) {
  294.                sb.append(badColumns.elementAt(i).toString());
  295.                if (i < badCount - 1) {
  296.                   sb.append(", ");
  297.                }
  298.             }
  299.  
  300.             String err = ResourceUtil.getResourceString("asp.wizard.res", class$asp$wizard$WVPanelDbQuery != null ? class$asp$wizard$WVPanelDbQuery : (class$asp$wizard$WVPanelDbQuery = class$("asp.wizard.WVPanelDbQuery")), "error.unsupported_fields");
  301.             err = err + "\n\n" + sb.toString();
  302.             throw new ExternalError(err);
  303.          }
  304.       } catch (SQLException e) {
  305.          System.err.println(((Throwable)e).getMessage());
  306.       }
  307.  
  308.    }
  309.  
  310.    public void testQuery() {
  311.       try {
  312.          Connection _conn = this.getConnection();
  313.          WizDbManager WDBM = WizDbManager.getInstance();
  314.          ResultSet rs = WDBM.getResultSet(_conn, this.buildSQL());
  315.          SqlTableModelTestFrame testFrame = SqlTableModelTestFrame.getInstance();
  316.          testFrame.update(rs);
  317.          testFrame.setVisible(true);
  318.       } catch (EWizDbManager e) {
  319.          String err = ResourceUtil.getResourceString("asp.wizard.res", class$asp$wizard$WVPanelDbQuery != null ? class$asp$wizard$WVPanelDbQuery : (class$asp$wizard$WVPanelDbQuery = class$("asp.wizard.WVPanelDbQuery")), "error.query_failed");
  320.          AspWizardExceptionHandler.showMessage(0, err + "\n\n" + ((Throwable)e).getMessage());
  321.       }
  322.  
  323.    }
  324.  
  325.    public String buildSQL() {
  326.       WizardViewDbQuery view = (WizardViewDbQuery)((WizardPage)this).getView();
  327.       String SQLStr = "Select " + view.getSelect().trim();
  328.       SQLStr = SQLStr + " From " + view.getFrom().trim();
  329.       if (view.getWhere().trim().length() > 0) {
  330.          SQLStr = SQLStr + " Where " + view.getWhere().trim();
  331.       }
  332.  
  333.       if (view.getOrderBy().trim().length() > 0) {
  334.          SQLStr = SQLStr + " Order By " + view.getOrderBy().trim();
  335.       }
  336.  
  337.       return SQLStr;
  338.    }
  339.  
  340.    public void setupIntroText() {
  341.       WizardManager wm = ((WizardModelAbstract)this).getWizardManager();
  342.       WizardPage modelConn = wm.getPreviousModel(this);
  343.       WizardPage modelPrevQuery = wm.getModelOfClassLeftOf(this.getClass(), modelConn);
  344.       boolean firstQueryModel = modelPrevQuery == null;
  345.       WizardViewAbstract view = (WizardViewAbstract)((WizardPage)this).getView();
  346.       if (firstQueryModel) {
  347.          view.setIntroText((String)null, (String)null, true);
  348.       } else {
  349.          String head = ResourceUtil.getResourceString("asp.wizard.res", class$asp$wizard$WVPanelDbQuery != null ? class$asp$wizard$WVPanelDbQuery : (class$asp$wizard$WVPanelDbQuery = class$("asp.wizard.WVPanelDbQuery")), "label.secondintrohead");
  350.          String text = ResourceUtil.getResourceString("asp.wizard.res", class$asp$wizard$WVPanelDbQuery != null ? class$asp$wizard$WVPanelDbQuery : (class$asp$wizard$WVPanelDbQuery = class$("asp.wizard.WVPanelDbQuery")), "label.secondintro");
  351.          view.setIntroText(head, text, false);
  352.       }
  353.  
  354.    }
  355.  
  356.    // $FF: synthetic method
  357.    static Class class$(String class$) {
  358.       try {
  359.          return Class.forName(class$);
  360.       } catch (ClassNotFoundException forName) {
  361.          throw new NoClassDefFoundError(((Throwable)forName).getMessage());
  362.       }
  363.    }
  364. }
  365.